package com.airline.service;

import com.airline.dao.OrderDAO;
import com.airline.entity.Order;
import com.airline.entity.User;

import java.util.List; // 关键导入：解决“找不到符号 类 List”错误
import java.time.LocalDateTime;

public class OrderService {
    // 正确初始化OrderDAO：直接new实例，包路径匹配（com.airline.dao.OrderDAO）
    private final OrderDAO orderDAO = new OrderDAO();
    private final FlightService flightService = new FlightService();
    private final FlightStockService stockService = new FlightStockService(); // 余票服务

    /**
     * 订票业务（关联当前登录用户，含余票校验）
     */
    public boolean bookTicket(String flightNo, User currentUser) {
        // 1. 校验用户是否登录
        if (currentUser == null) {
            System.out.println("请先登录再订票！");
            return false;
        }

        // 2. 校验航班是否存在
        if (!flightService.existsFlight(flightNo)) {
            System.out.println("航班 " + flightNo + " 不存在，订票失败！");
            return false;
        }

        // 3. 校验余票是否充足
        if (!stockService.decreaseStock(flightNo)) {
            System.out.println("航班 " + flightNo + " 余票不足，订票失败！");
            return false;
        }

        // 4. 创建订单并保存
        Order order = new Order();
        order.setFlightNo(flightNo);
        order.setUserName(currentUser.getRealName()); // 关联登录用户的真实姓名
        order.setBookTime(LocalDateTime.now());

        orderDAO.addOrder(order);
        System.out.println("订票成功！订单号：" + order.getId() + "，乘客：" + currentUser.getRealName());
        return true;
    }

    /**
     * 查询用户个人订单（按真实姓名查询，仅返回当前用户的订单）
     */
    public List<Order> getOrdersByUserName(String userName) {
        // 调用OrderDAO的findOrdersByUserName方法（已在DAO中定义）
        return orderDAO.findOrdersByUserName(userName);
    }

    /**
     * 根据订单号查询订单（供退票服务调用）
     */
    public Order getOrderById(int orderId) {
        return orderDAO.findOrderById(orderId);
    }
}